/**
 * 阶乘函数
 * @param {Number} n 传入n
 * @returns n的阶乘
 */
function fact(n) {
	if (n == 0) {
		// n = 0是阶乘函数的结束条件
		return 1;
	} else {
		// 否则，调用自己
		return n * fact(n - 1);
	}
}

const fs = require('fs');
const path = require('path');

/**
 * 递归获取文件夹及其子文件夹下所有文件
 * @param {String} dir 文件夹路径
 * @param {Array} result 用于记录结果的引用数组
 */
function getFileList(dir, result = []) {
	// 获取文件夹下的文件名列表
	const files = fs.readdirSync(dir);
	// 遍历获取到的内容
	for (let file of files) {
		// 先把每个路径拼接为完整路径
		let fullPath = path.join(dir, file);
		// 如果该文件是文件，则加入到结果集
		if (fs.statSync(fullPath).isFile()) {
			result.push(fullPath);
		} else {
			// 否则，调用自己遍历该文件夹
			// 同样注意思考一下，这里传的参是什么
			getFileList(fullPath, result);
		}
	}
}

/**
 * 递归获取文件夹及其子文件夹下所有文件-启动部分
 * @param {String} dir 文件夹路径
 * @returns 全部文件列表
 */
function getFileListStart(dir) {
	let list = [];
	getFileList(dir, list);
	return list;
}